package util;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class AdministradorFecha {
	private int factorSegundos;
	private int factorAnios;
	private int factorHoras;
	private int factorMinutos;
	private int factorDias;
	
	public AdministradorFecha(){
		factorSegundos = 1000;
		factorAnios = 365;
		factorHoras = 60;
		factorMinutos = 60;
		factorDias = 24;
	}
	
	//Devuelve la diferencia entre dos fechas, en milisegundos
	public long diferenciaEnMilisegundos(Date anioMenor, Date anioMayor){
		long dif = anioMayor.getTime() - anioMenor.getTime();
		return dif;
	}
	
	//Devuelve la diferencia que hay entre las dos fechas, en anios
	public int diferenciaEnAnios(Date anioMenor, Date anioMayor){
		int diferencia = Integer.parseInt(obtenerAnioFecha(anioMayor)) - Integer.parseInt(obtenerAnioFecha(anioMenor));
		return diferencia;
	}
	
	public int calcularEdad(Date fechaNacimiento){
		Date fechaAct = new Date();
		int diferencia = Integer.parseInt(obtenerAnioFecha(fechaAct)) - Integer.parseInt(obtenerAnioFecha(fechaNacimiento));
		if( (Integer.parseInt(obtenerMesFecha(fechaAct)) < Integer.parseInt(obtenerMesFecha(fechaNacimiento)))
			|| (Integer.parseInt(obtenerMesFecha(fechaAct)) == Integer.parseInt(obtenerMesFecha(fechaNacimiento)) 
				&& Integer.parseInt(obtenerDiaFecha(fechaAct)) < Integer.parseInt(obtenerDiaFecha(fechaNacimiento))) )
			diferencia-=1;
		return diferencia;
	}
	
	//Devuelve la fecha pasada como parametro, pero sumandole los anios indicados - resultado en milisegundos
	public long sumarAnios(Date fecha,int anios){
		long fechaRes = fecha.getTime();
		long aniosSuma = anios;
		aniosSuma *= factorAnios;
		aniosSuma *= factorDias;
		aniosSuma *= factorHoras;
		aniosSuma *= factorMinutos;
		aniosSuma *= factorSegundos;
		fechaRes += aniosSuma;
		return fechaRes;
	}
	
	//Devuelve la fecha pasada como parametro, pero restandole los anios indicados - resultado en milisegundos
	public long restarAnios(Date fecha,int anios){
		long fechaRes = fecha.getTime();
		long aniosResta = anios;
		aniosResta *= factorAnios;
		aniosResta *= factorDias;
		aniosResta *= factorHoras;
		aniosResta *= factorMinutos;
		aniosResta *= factorSegundos;
		fechaRes -= aniosResta;
		return fechaRes;
	}
	
	//Da como resultado el anio actual menos la cantidad de anios pasada por paraetro
	public int obtenerAniosHaciaAtras(Date fecha,int anios){
		int anioFecha = Integer.parseInt(obtenerAnioFecha(fecha));
		int anioRes = anioFecha - anios;
		return anioRes;
	}
	
	public String obtenerFechaCalendario(Date fecha){
		SimpleDateFormat dateFormatter = new SimpleDateFormat("dd/MM/yyyy");
		return dateFormatter.format(fecha);
	}
	
	public Date obtenerFechaDate(int dia, int mes, int anio){
		Calendar cal = Calendar.getInstance();
		cal.set(anio,mes-1,dia);
		return cal.getTime();
	}
	
	public String obtenerDiaFecha(Date fecha){
		SimpleDateFormat dateFormatter = new SimpleDateFormat("dd");
		return dateFormatter.format(fecha);
	}
	
	public String obtenerMesFecha(Date fecha){
		SimpleDateFormat dateFormatter = new SimpleDateFormat("MM");
		return dateFormatter.format(fecha);
	}

	public String obtenerAnioFecha(Date fecha){
		SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy");
		return dateFormatter.format(fecha);
	}
	
}
